package controller

import (
	"bookManagerSystem/dao/mysql"
	"bookManagerSystem/model"
	"github.com/gin-gonic/gin"
	"github.com/google/uuid"
)

func RegisterHandler(c *gin.Context) {
	// 创建一个新的model.User结构体实例p，用于存储请求中的JSON数据
	p := new(model.User)
	// 通过ShouldBindJSON方法将请求中的JSON数据绑定到p结构体中
	if err := c.ShouldBindJSON(p); err != nil {
		c.JSON(400, gin.H{
			// 如果绑定出错，返回400错误，同时返回错误信息
			"err": err.Error(),
		})
		return
	}
	// 将p结构体中的数据存储到数据库中
	mysql.DB.Create(p)
	// 返回200状态码，同时返回成功消息和存储的p结构体数据
	c.JSON(200, gin.H{"msg": p})
}

// 登录
func LoginHandler(c *gin.Context) {
	// 创建一个新的model.User结构体实例p，用于存储请求中的JSON数据
	p := new(model.User)
	// 通过ShouldBindJSON方法将请求中的JSON数据绑定到p结构体中
	if err := c.ShouldBindJSON(p); err != nil {
		// 如果绑定出错，返回400错误，同时返回错误信息
		c.JSON(400, gin.H{"err": err.Error()})
		return
	}
	// 创建一个model.User结构体实例u，用于查询数据库中是否存在匹配的用户
	u := model.User{Username: p.Username, Password: p.Password}
	if rows := mysql.DB.Where(&u).First(&u).Row(); rows == nil {
		// 如果查询结果为空，返回403错误，同时返回错误消息
		c.JSON(403, gin.H{"msg": "用户名密码错误"})
		return
	}
	// 生成一个新的token
	token := uuid.New().String()
	// 将生成的token更新到数据库中对应用户的token字段
	mysql.DB.Model(u).Update("token", token)
	// 返回200状态码，同时返回生成的token
	c.JSON(200, gin.H{"token": token})
}
